package de.grosjohann.android.feuerwehr.util;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import de.grosjohann.android.feuerwehr.domain.CalendarItem;
import de.grosjohann.android.feuerwehr.domain.Fahrzeug;
import de.grosjohann.android.feuerwehr.domain.FireIndex;
import de.grosjohann.android.feuerwehr.domain.WeatherWarning;

public final class JSON2ObjectUtil {

  public static Fahrzeug getFahrzeug(JSONObject jsonObj) throws JSONException {
    return new Fahrzeug(jsonObj);
  }

  public static List<Fahrzeug> getFahrzeugList(JSONArray jsonArr) throws JSONException {
    List<Fahrzeug> list = new ArrayList<Fahrzeug>(jsonArr.length());

    for (int i = 0; i < jsonArr.length(); i += 1) {
      Object obj = jsonArr.get(i);
      if (obj instanceof JSONObject) {
        list.add(getFahrzeug((JSONObject) obj));
      }
    }

    return list;
  }

  public static List<Fahrzeug> getFahrzeugList(String json) throws JSONException {
    return getFahrzeugList(new JSONArray(json));
  }

  public static List<WeatherWarning> getWeatherWarningList(String json) throws JSONException {

    JSONObject jsonObj = new JSONObject(json);
    JSONArray jsonArr = jsonObj.getJSONArray("weatherWarning");

    List<WeatherWarning> list = new ArrayList<WeatherWarning>(jsonArr.length());

    for (int i = 0; i < jsonArr.length(); i += 1) {
      Object obj = jsonArr.get(i);
      if (obj instanceof JSONObject) {
        list.add(new WeatherWarning((JSONObject) obj));
      }
    }

    return list;
  }

  public static FireIndex getFireIndex(String json) throws JSONException {
    JSONObject jsonObj = new JSONObject(json).getJSONObject("fireIndex");

    if (jsonObj == null) {
      return null;
    }
    return new FireIndex(jsonObj);
  }

  public static List<CalendarItem> getCalendarItems(String json) throws JSONException {

    JSONArray jsonArr = new JSONArray(json);

    List<CalendarItem> list = new ArrayList<CalendarItem>(jsonArr.length());

    for (int i = 0; i < jsonArr.length(); i += 1) {
      Object obj = jsonArr.get(i);
      if (obj instanceof JSONObject) {
        list.add(new CalendarItem((JSONObject) obj));
      }
    }

    return list;
  }
}
